import axios from "axios";
import { ElLoading, ElMessage } from "element-plus";
import { localStorage } from "./storage";

let showLoading: any = null;

// 存放 pending 的请求
const taskList = new Map();

// 创建axios实例
const request = axios.create({
    baseURL: "",
    timeout: 120 * 1000,
});

// 请求拦截器
request.interceptors.request.use(
    (config: any) => {
        // 全局使用 loading
        showLoading = ElLoading.service({ fullscreen: true });

        // 请求头携带token
        const token = localStorage.getStorage("token");
        config.headers.token = token;

        // 处理重复请求
        if (taskList.has(config.url)) {
            const cancel = taskList.get(config.url);
            cancel(config.url);
            taskList.delete(config.url);
        } else {
            new axios.CancelToken((cancel) => {
                taskList.set(config.url, cancel);
            });
        }

        return config;
    },
    (error) => {}
);

// 响应拦截器
request.interceptors.response.use(
    (response) => {
        // 关闭全局的 loading
        if (showLoading) showLoading.close();

        // 统一处理成功请求
        // ElMessage({
        //     type: "success",
        //     message: "请求成功",
        //     showClose: true,
        // });
        return response.data.data;
    },
    (error) => {
        // 请求失败也需要清除全局 loading
        if (showLoading) showLoading.close();

        // 统一处理失败请求
        // ElMessage({
        //     type: "error",
        //     message: "请求失败",
        //     showClose: true,
        // });
    }
);
export default request;
